package com.fh.reflection.class_;

import com.fh.Car;

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;

/**
 * @author 方小勤
 * @version 1.0~
 */
public class Class02 {
    public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException, NoSuchFieldException {
        String classAllPath = "com.fh.Car";
        //1. 获取到 Car 类对应的Class对象
        //<?> 表示不确定的 Java 类型
        Class<?> cls = Class.forName(classAllPath);
        //2. 输出 cls
        System.out.println(cls);//显示cls对象，是哪个类的Class对象 com.fh.Car
        System.out.println(cls.getClass());//输出 cls 运行类型
        //3. 得到包名
        System.out.println(cls.getPackage().getName());//包名
        //4. 得到全类名
        System.out.println(cls.getName());
        //5. 通过 cls 创建对象实例
        Car car = (Car)cls.getDeclaredConstructor().newInstance();
        System.out.println(car);
        //6. 通过反射获取属性 brand
        Field brand = cls.getField("brand");
        System.out.println(brand.get(car));
        //7. 通过反射给对象属性赋值
        brand.set(car,"奔驰");
        System.out.println(brand.get(car));
        //得到字段属性
        Field[] fields = cls.getFields();
        for (Field field : fields) {
            System.out.println(field.getName());
        }

    }
}
